package com.ss.web.tagmark.service;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import com.ss.web.tagmark.dao.ParameterDao;
import com.ss.web.tagmark.entity.SystemParameter;

/**
 * 全局配置的业务类
 *
 * @author taofucheng
 *
 */
@Service
public class ParameterService extends BaseService<SystemParameter> {
	/** 词性 */
	public static final String PART_OF_SPEECH = "PART_OF_SPEECH";
	/** 用户状态 */
	public static final String USER_STATUS = "USER_STATUS";

	@Autowired
	private ParameterDao paramDao;

	/**
	 * 获取所有的配置信息。
	 *
	 * @return
	 */
	public List<SystemParameter> getAll() {
		return paramDao.findAll(Sort.by("order"));
	}

	/**
	 * 获取所有的用户状态参数
	 *
	 * @return
	 */
	public List<SystemParameter> getUserStatus() {
		List<SystemParameter> apps = getListByType(USER_STATUS);
		return apps;
	}

	/**
	 * 按照value升序排序，取第一个
	 *
	 * @param type
	 * @return
	 */
	public SystemParameter getFirstByType(String type) {
		List<SystemParameter> configs = getListByType(type);
		if (configs == null || configs.isEmpty()) {
			return null;
		}
		for (SystemParameter c : configs) {
			if (c != null && c.getRecId() != null) {
				return c;
			}
		}
		return null;
	}

	/**
	 * 获取所有指定type的配置信息。
	 *
	 * @param type
	 * @return
	 */
	public List<SystemParameter> getListByType(String type) {
		if (StringUtils.isBlank(type)) {
			return null;
		}
		SystemParameter p = new SystemParameter();
		p.setType(type);
		return paramDao.findAll(Example.of(p), Sort.by("value"));
	}

	/**
	 * 根据主键查询对应的配置信息。
	 *
	 * @param recId
	 */
	public SystemParameter getById(long recId) {
		if (recId < 1) {
			return null;
		}
		return paramDao.getOne(recId);
	}

	/**
	 * 根据类型与value唯一定位一个配置
	 *
	 * @param name
	 * @param key
	 * @return
	 */
	public SystemParameter getByTypeAndValue(String type, String value) {
		if (StringUtils.isBlank(type) || StringUtils.isBlank(value)) {
			return null;
		}
		SystemParameter p = new SystemParameter();
		p.setType(type);
		p.setValue(value);
		List<SystemParameter> ps = paramDao.findAll(Example.of(p), Sort.by("order"));
		return ps == null || ps.isEmpty() ? null : ps.get(0);
	}

}
